/*
 * Copyright (c) 2005-2008 旭鸣软件
 * All rights reserved. 
 */
/*
 * File：IDBUPage.java
 * History:
 *       2009-1-16: Initially created, 汤垲峰.
 */
package com.xteam.db;

import java.util.Map;

import com.xteam.db.page.Page;
import com.xteam.db.page.PageObjectSet;

/**
 * <p>
 * 分页使用的接口
 * </p>
 * @author 汤垲峰
 */
public interface IBasePageDao {
	
	/**
	 * <P>
	 * 执行SQL语句
	 * </P>
	 * @author 汤垲峰 2009-1-16
	 * @param sql
	 * @param countSql TODO
	 * @param parms
	 * @param firstResult
	 * @param maxResult
	 * @return
	 */
	public <T> PageObjectSet<T> querySql(String sql, String countSql, Object[] parms, int firstResult, int maxResult) throws Exception;

	/**
	 * <P>
	 * 执行分页功能的SQL语句
	 * </P>
	 * @author 汤垲峰 2009-4-27
	 * @param sql
	 * @param countSql TODO
	 * @param parms
	 * @param page
	 * @return
	 */
	public <T> PageObjectSet<T> querySql(String sql, String countSql, Object[] parms, Page page) throws Exception;

	/**
	 * <P>
	 * 执行一个有返回值的SQL语句
	 * </P>
	 * @author 汤垲峰 2009-1-16
	 * @param sql
	 * @param countSql TODO
	 * @param firstResult
	 * @param maxResult
	 * @return
	 */
	public <T> PageObjectSet<T> querySql(String sql, String countSql, int firstResult, int maxResult) throws Exception;

	/**
	 * <P>
	 * 执行一个有返回值的SQL语句
	 * </P>
	 * @author 汤垲峰 2009-4-27
	 * @param sql
	 * @param countSql TODO
	 * @param page
	 * @return
	 */
	public <T> PageObjectSet<T> querySql(String sql, String countSql, Page page) throws Exception;

	/**
	 * <P>
	 * 获取一个指定类型的结果列表
	 * </P>
	 * @author 汤垲峰 2009-1-16
	 * @param clazz 实体类型
	 * @param countHql 计算总记录数的HQL语句
	 * @param firstResult 开始记录号
	 * @param maxResult 每页记录条数
	 * @return
	 * @throws Exception
	 */
	public <T> PageObjectSet<T> query(Class<T> clazz, String countHql, int firstResult, int maxResult) throws Exception;

	/**
	 * <P>
	 * 执行分页功能的SQL 语句
	 * </P>
	 * @author 汤垲峰 2009-4-27
	 * @param clazz 实体类型
	 * @param page 分页对象
	 * @return
	 * @throws Exception
	 */
	public <T> PageObjectSet<T> query(Class<T> clazz, Page page) throws Exception;

	/**
	 * <P>
	 * 根据字符串匹配来查询相应结果
	 * </P>
	 * @author 汤垲峰 2009-1-16
	 * @param hql
	 * @param countHql TODO
	 * @param parametersMap
	 * @param firstResult
	 * @param maxResult
	 * @return
	 */
	public <T> PageObjectSet<T> query(String hql, String countHql, Map<String, Object> parametersMap, int firstResult, int maxResult) throws Exception;

	/**
	 * <P>
	 * 返回分页结果
	 * </P>
	 * @author 汤垲峰 2009-4-27
	 * @param hql
	 * @param parametersMap 参数
	 * @param page 分页接口
	 * @return
	 */
	public <T> PageObjectSet<T> query(String hql, Map<String, Object> parametersMap, Page page) throws Exception;

	/**
	 * <P>
	 * 查询一个HQL的结果
	 * </P>
	 * @author 汤垲峰 2009-1-16
	 * @param hql
	 * @param countHql TODO
	 * @param firstResult
	 * @param maxResult
	 * @return
	 * @throws Exception
	 */
	public <T> PageObjectSet<T> query(String hql, String countHql, int firstResult, int maxResult) throws Exception;

	/**
	 * <P>
	 * 分页功能HQL
	 * </P>
	 * @author 汤垲峰 2009-4-27
	 * @param hql
	 * @param firstResult
	 * @param maxResult
	 * @return
	 * @throws Exception
	 */
	public <T> PageObjectSet<T> query(String hql, Page page) throws Exception;
	

	/**
	 * 带参数的分页查询
	 * @author tangkf  ---2012-1-13
	 * @param <T>
	 * @param hql
	 * @param countHql TODO
	 * @param param
	 * @return
	 * @throws Exception
	 */
	public <T> PageObjectSet<T> query(String hql, String countHql,Object[] param, int firstResult, int maxResult) throws Exception;

	/**
	 * 带参数的分页查询
	 * @author tangkf  ---2012-1-13
	 * @param <T>
	 * @param hql
	 * @param param
	 * @param page
	 * @return
	 * @throws Exception
	 */
	public <T> PageObjectSet<T> query(String hql, Object[] param,Page page) throws Exception;
	
	/**
	 * 执行一个带条件和分页的SQL语句
	 * @author 汤垲峰 2009-12-27
	 * @param sql
	 * @param countSql TODO
	 * @param parms
	 * @param firstResult
	 * @param maxResult
	 * @return
	 */
	public <T> PageObjectSet<T> querySql(String sql, String countSql, Map<String, Object> parms, int firstResult, int maxResult) throws Exception;

	/**
	 * 执行一个带条件MAP的SQL语句
	 * @author 汤垲峰 2009-12-27
	 * @param sql
	 * @param countSql TODO
	 * @param parms
	 * @param page
	 * @return
	 */
	public <T> PageObjectSet<T> querySql(String sql, String countSql, Map<String, Object> parms, Page page) throws Exception;
}
